home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio 2000
/
Ham Radio 2000.iso
/
ham2000
/
tcp_ip
/
timed
/
rdate.c
< prev
next >
Wrap
Text File
|
1992-04-01
|
2KB
|
98 lines
/* Internet rdate client
* Author: Brian Teravskis, WD0EFL
* Date: 03/30/92
*
* Based on RFC868 Time Protocol
*/
#include <stdio.h>
#include <string.h>
#include "global.h"
#include "mbuf.h"
#include "socket.h"
#include "session.h"
#include "proc.h"
#include "netuser.h"
#include "commands.h"
#include "tty.h"
#include "timer.h"
#include <time.h>
#define IPPORT_TIME 37
#define DIFFTIME 2208988800
#define RDATETIMEOUT 30
static void rdate_timeout();
int
dordate(argc,argv,p)
int argc;
char *argv[];
void *p;
{
struct sockaddr_in sock;
int s,i;
struct mbuf *bp;
struct timer *t;
time_t rtime;
if((sock.sin_addr.s_addr = resolve(argv[1])) == 0){
log(-1,"RDATE:Host %s unknown\n",argv[1]);
return 1;
}
sock.sin_family = AF_INET;
sock.sin_port = IPPORT_TIME;
/* Open connection to time server */
if((s = socket(AF_INET,SOCK_STREAM,0)) == -1) {
log(-1,"RDATE:Can't create socket");
return 1;
}
sockmode(s,SOCK_BINARY);
/* Set timeout timer */
t = (struct timer *)callocw(1, sizeof(struct timer));
t->func = rdate_timeout;
t->arg = (void *) &s;
set_timer(t,RDATETIMEOUT*1000L);
start_timer(t);
/* Connect to time server */
if(connect(s,(char *)&sock,sizeof(sock)) == -1){
/* Connect failed */
stop_timer(t);
free(t);
log(s,"RDATE: Connect failed");
close_s(s);
return 1;
}
/* Successful connect, stop timout timer */
stop_timer(t);
free(t);
/* Get time info sent by server */
recv_mbuf(s,&bp,0,NULLCHAR,(int *)0);
rtime = (time_t)pull32(&bp);
/* Convert 1900 start date to 1970 start date */
rtime -= DIFFTIME;
/* Set the system time */
stime(&rtime);
log(s,"RDATE:Clock set to - %s from %s\n",ctime(&rtime),argv[1]);
printf("Clock set to - %s\n",ctime(&rtime));
free_q(&bp);
close_s(s);
return 0;
} /* dordate */
/*
* Close socket after timeout on connect
*/
static void
rdate_timeout(arg)
void *arg;
{
int *s;
s = (int *)arg;
close_s(*s);
} /* rdate_timeout */